#ifndef __IMAGE_H__
#define __IMAGE_H__

#include "../头文件/showjpg.h"
#include "../头文件/AllFunction.h"

#pragma pack(1) // 设置最大对齐数可以为n，n可以取(1, 2, 4, 8, 16)
typedef struct
{
    unsigned short bfType;       // (2字节): 用于标识文件类型，BMP文件通常是"BM"。
    unsigned int bfSize;         // (4字节): 文件大小，以字节为单位。
    unsigned short bfReserverd1; // (各2字节): 保留字段，通常设置为0。
    unsigned short bfReserverd2; // (各2字节): 保留字段，通常设置为0。
    unsigned int bfOffBits;      // (4字节): 从文件头到像素数据的偏移量，以字节为单位。
} bmpfile_head_t;                // bmp文件信息头

typedef struct
{
    unsigned int biSize;        //   (4字节): 位图信息头的大小，通常为40。
    unsigned int biWidth;       //   (4字节): 图像的宽度，以像素为单位。
    unsigned int biHeight;      //  (4字节): 图像的高度，以像素为单位。
    unsigned short biPlanes;    //  (2字节): 颜色平面数，通常为1。
    unsigned short biBitCount;  // (2字节): 每个像素的位数，如24位颜色。
    unsigned int biCompression; // (4字节): 压缩类型，0表示未压缩。
    unsigned int biSizeImage;   //(4字节) : 像素数据的大小，以字节为单位。
    unsigned int biXPelsPerMeter;
    unsigned int biYPelsPerMeter; // (各4字节): 水平和垂直分辨率，以像素每米为单位。
    unsigned int biClrUsed;       // (4字节): 用于颜色的调色板条目的数量。
    unsigned int biClrmportant;   // (4字节): 重要的颜色数。
} bmpbit_head_t;                  // bmp位图信息头

/**
 * @brief 显示bmp图片
 *
 * @param bmp_path 图片的路径
 * @param lcd mmap指针(开发板的液晶屏)
 * @return true 显示成功
 * @return false 发生错误
 */
bool show_bmp_image(char *bmp_path);

void show_gif_image(char *gif_path);

bool show_bmp_image2(char *bmp_path, int index_x, int index_y);

int draw_image(const char *path, int offset_x, int offset_y, int (*map)[800]);
#endif
